package com.zhentao.service.impl;

import com.baomidou.mybatisplus.core.injector.methods.Update;
import com.zhentao.files.TbFiles;
import com.zhentao.files.TbWarehouse;
import com.zhentao.mapper.TbFilesMapper;
import com.zhentao.mapper.TbWarehouseMapper;
import com.zhentao.sensitive.SensitiveWordUtil;
import com.zhentao.sensitive.TbSensitive;
import com.zhentao.service.FilesAutoScanService;
import com.zhentao.service.TbSensitiveService;
import com.zhentao.user.UserHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @ClassName: FilesAutoScanServiceImpl
 * @Author: 振涛教育_Q
 * @Date: 2024/12/8 15:45
 */
@Service
public class FilesAutoScanServiceImpl implements FilesAutoScanService {
    @Autowired
    private TbFilesMapper filesMapper;
    @Autowired
    private TbWarehouseMapper warehouseMapper;
    @Autowired
    private TbSensitiveService sensitiveService;
    @Override
    public void autoScanFiles(Long filesId) {
        // 根据档案id查询  对应的信息
        TbFiles tbFiles = filesMapper.selectById(filesId);
        if (tbFiles != null) {
            // 查询对应的仓库
            TbWarehouse warehouse = warehouseMapper.selectById(tbFiles.getWId());
            // 对自管理敏感词进行一个查询，使用stream流进行一个集合处理
            List<String> sensitives = sensitiveService.list().stream().map(TbSensitive::getSensitives).collect(Collectors.toList());
            // 调用  SensitiveWordUtil
            SensitiveWordUtil.initMap(sensitives);
            // 进行判断 true 修改对应的状态 为 5：敏感词通过  否则 直接显示未通过  修改为 4：未通过
            if(warehouse.getContent() != null) {
                Map<String, Integer> map = SensitiveWordUtil.matchWords(warehouse.getContent());
                if (map.size() > 0) {
                    // 存在敏感词
                    // 未通过获取到对应类型的描述信息，赋值给 档案中的 remark字段 作为为什么审核未通过
                    tbFiles.setId(tbFiles.getId());
                    tbFiles.setStatus(4);
                    tbFiles.setRemark("当前文章存在违规内容："+map);
                    filesMapper.updateSentives(tbFiles);
                } else {
                    // 不存在敏感词  敏感词通过
                    tbFiles.setStatus(5);
                    filesMapper.updateSentives(tbFiles);
                }
            }
        }
    }
}
